GSP-007 Set Up Network and HTTP Load Balancers
2017년 10월 25일 수요일
오전 9:10
링크: https://qwiklabs.com/focuses/6478
오버뷰
두개의 Load balacer가 있고, 여기서는 둘 다 살펴본다.
할일은
1) network load balancer 설정
2) HTTP(s) load balancer 설정
3) 실습을 통한 두 발란서간의
차이를 배워보기
일단 서버들이
있어야 그들간의 발란스를 맞추지
1) Nginx 서버 클러스터를
만들고
2) 이 서버들이 Instance Templates 와 Managed Instance Group
을 이용한 Static content를 제공하게 한다
- Instance Template: VM 스펙 설정
- Manged Instance Group: Instance Template에서 설정한 VM을 instance로 맹근다
1) nginx을 인스톨하고
2) 시작한다
3) sed -I 이후의
명령은 좀 찾아보자
|
cat << EOF > startup.sh #! /bin/bash apt-get update apt-get install -y nginx service nginx start sed -i -- 's/nginx/Google Cloud Platform - '"\$HOSTNAME"'/' /var/www/html/index.nginx-debian.html EOF |
|
*sed = stream editor : https://www.gnu.org/software/sed/manual/sed.html
- grep 과 같은 필터이지만
파일을 수정할 수 있다. 대신에 ed 처럼 대화식 처리는
안된다.
- 1개 라인씩 입력라인을
받아들여서 표준출력으로 출력한다
sutstitute 사용예
sed 's/addrass/address/' list.txt : list.txt를 읽어서 addrass를 address로 바꾼다. 단, 원본파일을
바꾸지 않고 표준출력만 한다.
sed 's/\t/\ /' list.txt : list.txt를 읽어서 탭문자를 엔터로 변환
1) 따라서 위의 경우에는 /var/www/html/index.nginx-devian.html 파일을 읽어서
2) 해당항목 있으면 변경해서
출력, 없으면 그냥 그 라인 그대로 출력이고 원본파일은 변경되지 않아야 하지만
3) -i 옵션이라 파일
자체를 수정한다
nginx 를 만나면 Google Cloud Platform - '"\$HOSTNAME"' 로
수정해준다.
여기까지 스크립트 startup.sh 작성완료
나중에 VM 인스턴스 생성후 확인해봄 $HOSTNAME은 런타임에 값이 들어가겠다
- 해보니 아니다 뭔가
잘못한듯…;;;
1) nginx-template 라는 instance Template를 만들겠다
2) startup-script는 startup.sh 이다
여기까지
1) startup.sh 스크립트를
만들고
2) nginx-template 라는 instance-template를
startup.sh 로 만들었음
- 이것은 설계도이다
|
|
- target pool을
만들면 그룹내의 모든 인스턴스에 대해 single access point를 가진다
- 이걸 기반으로 Load Balace를 할 거다
- nginx-pool 이라는 target-pool을 만들어라
여기까지
- 스크립트 만들고
- 스크립트로 템플리트
만들고
- 그거랑은 별개로 single access point를 가지는 target-pool 을
만듬 (이름은 nginx-pool)
- 참고로 region은
예제와 같이 europe-west1
- nginx-group 이라는 managed instance-group을 만들겠다.
- 기본이 되는 instance name은 nginx 이다. nginx- 로 사직하는 인스턴스를 만들겠다는 거다 뒤에 숫자같은게 붙겠지?
- 2개 만들겠다
- template는 nginx-template를 만들겠다. 여기서 잠깐! template 라는건 일종의 간단 도커 이미지
같은걸?
- 그리고 nginx-pool에 연결하겠다 = single access point
|
현재는 External IP로 접근 안됨 나중에 방화벽 설정을 하는 대신 여기서 생성된 두 개의 VM 각각을 edit 하여 allow HTTP(s) 해줘도 되겠다. |
|
|
- 80 포트로 들락거릴
수 있는 www-firewall 이라는 firewall-rules를
만들었음
- 이제 Project 내부의 80 포트 사용하는 놈들은 통과 가능?
그냥 룰만
만들어진 것임
- 들어오는 IP 프로토콜 데이터를 기반으로 (= address, port,
protocol type 등등) 시스템의 로드를 발란싱한다
- Network 로드
발란서는 HTTP(S)에서는 안되는 옵션도 지원한다
- 예를들면 TCP/UDP 기반 프로토콜 기반의 SMTP 같은 놈도 로드 발란싱
해준다
- TCP 연결에 기반한
특성에 관심이 있다면 로드 발란서는 앱에서 packer inspect를 하게 해준다
아까 보았던 nginx-pool 을 다시보면, 프론트엔드가 설정안되었다는 것을
알 수있다
- nginx-lb 라는
로드 발란서를 만드는데
- 지역은 유럽이고 ,포트는 80이며
- nginx-pool 이라는 target-pool = single access point로 들어오는 놈을 처리하도록 하자
그리고 아래와
같이 로드발란서를 확인할 수 있다
그리고 VPC network >> External IP Addresses 에서 확인 가능
- 맨 위꺼가 통합되어
들어오는 IP 이고 아래 두개로 로드 발란싱 해준다.
- 그런데 아래 두개로 direct로 들어올 수도 있다.
여기서도 확인가능
1) Nginx 을 설치하고
실행하는 스크립트 짜고
2) 그걸로 nginx-template 라는 instance template = 설계도를
만듬
3) 여러 개의 instance를 만들어도 하나의 통로로 연결될 수 있는 target-pool인 nginx-pool을 만들고
4) nginx-group을
만듬
- VM은 nginx-template를 참고해서 nginx- 으로 시작하는 이름으로
생성
- nginx-pool 이라는 single access point를 사용하게 함
5) 우선 firewall rule을 하나 만들어서 80 포트를 사용가능하게
해둠
6) 마지막으로 nginx-lb라는 로드 발란서를 만들어서 nginx-pool과 연결해줌
이제는 single access point인 nginx-pool의 External IP나 VM 각각의
External IP로 접근이 가능해줌
HTTP(s) Load Balancer 는 인스턴스로
들어오는 글로벌한 HTTP(s) request 를 처리해준다.
- 특정 URL 은 특정 인스턴스로 가게 rule을 정할 수 있다.
- Request 는 user 에게서 가장 가까운 Instance group 으로 간다.
- 만약 캐파가 부족하다면
그 다음 가까운 Instance group 으로 간다
이제부터는
퀵랩 토큰 사용이 아닌 내 계정으로 해봄 - SDK 사용해서 해봄
계정확인, 프로젝트 확인
Health Check 만들기
- 인스턴스가 HTTP/HTTPS traffic 에 반응하는지 체크
포트에 이름붙여주기
1) nginx-backend 라는 서비스가 만들어지는데
2) HTTP 프로토콜을
쓸것이며
3) 아까 만들어둔 http-basic-check 라는 헬스체크를 할거다. 글로벌하게
- 즉, 80으로 들어오는 HTTP request 들에 잘 반응하는지 체크할거다
아까만든 Single Access Point 인 nginx-pool 도 백엔드
서비스 였구나
만든 백엔드인 nginx-backend 를
이미 만들어둔
인스턴스 그룹인 nginx-group 에 더해준다
디폴트 URL map을 만들자
web-map 이라고 만들고 nginx-backend와 붙여준다
- nginx-backend는 nginx-group과 붙어있지?
그리고 target HTTP proxy를 만든다.
- Request를 내가
만들어둔 루트인 web-map 대로 가게 해주는 것이다.
이 Proxy를 적용하여 forwarding rulue을 적용해준다
- 실제로 적용되는 데는
몇 분이 걸린다
Microsoft OneNote 2016에서 작성